package org.jwos.platform.domain;

import java.util.Locale;
import java.util.Map;

import org.jwos.platform.util.MessageUtil;

public class Message {
	
	public static final String LOCALE_EN_US   = "en";
	
	public static final String LOCALE_ZH_CN   = "zh_CN";
	
	public static final String LOCALE_JA      = "ja";	
	
	private Locale locale;
	
	private ClassLoader classLoader;
	
	private Map messageMap;
	
	public Message() {	
		this(Locale.getDefault());
	}
	
	public Message(Locale locale) {
		this.setLocale(locale);
	}
	
	public Message(String locale) {
		this.setLocale(getLocaleBYName(locale));
	}
	
	public String get(String id){
		if(this.messageMap==null) {
			if(this.classLoader==null) {
				if(this.locale==null) {
					this.messageMap = MessageUtil.getMessageMap();
				} else {
					this.messageMap = MessageUtil.getMessageMap(this.locale);
				}				
			} else {
				if(this.locale==null) {
					this.messageMap = MessageUtil.getMessageMap(this.classLoader);
				} else {
					this.messageMap = MessageUtil.getMessageMap(this.classLoader,this.locale);
				}
			}
		}
		
		if(this.messageMap!=null) {
			return (String)this.messageMap.get(id);
		} else {
			return "";
		}		
	}
	
	public static Locale getLocaleBYName(String name) {
		if(LOCALE_ZH_CN.equalsIgnoreCase(name)) {
			return Locale.SIMPLIFIED_CHINESE;
		} else if(LOCALE_JA.equalsIgnoreCase(name)) {
			return Locale.JAPANESE;
		} else {
			return Locale.ENGLISH;
		}
	}

	public Locale getLocale() {
		return locale;
	}

	public void setLocale(Locale locale) {
		this.locale = locale;
	}

	public ClassLoader getClassLoader() {
		return classLoader;
	}

	public void setClassLoader(ClassLoader classLoader) {
		this.classLoader = classLoader;
	}
}
